package com.xmall.service;

import com.xmall.bean.bo.GoodsBO;
import com.xmall.bean.bo.GoodsListBo;
import com.xmall.bean.table.Goods;
import com.xmall.bean.table.GoodsAttribute;
import com.xmall.bean.table.GoodsProduct;
import com.xmall.bean.table.GoodsSpecification;
import com.xmall.bean.vo.*;
import com.xmall.bean.vo.goodsdetail.GoodsDetailVo;

import java.util.List;

/**
 * @InterfaceName: GoodsService
 * @PackageName: com.xmall.service
 * @author: Connor
 * @date: 2020/12/06
 * @Version: 1.0
 */
public interface GoodsService {
    /**
     * 获取所有商品信息显示在"商品管理-商品列表"页面
     *
     * @param page 页数
     * @param limit 当前页显示的商品信息条数
     * @param goodsSn 商品id
     * @param name 商品名称
     * @param sort 排序依据（add_time）
     * @param order 排序方式（desc）
     * @return 商品信息List和商品总条数（total）
     */
    GoodsListVO<Goods> queryGoodsList(Integer page, Integer limit, Integer goodsSn, String name, String sort, String order);

    /**
     * 将新添加的商品信息存入数据库
     * @param goodsBO 新添加的商品信息
     */
    void createGoods(GoodsBO<GoodsSpecification, GoodsProduct, GoodsAttribute> goodsBO);

    /**
     * 将修改过商品信息更新到数据库中
     * @param goodsBO 更新后的商品信息
     */
    void updateGoods(GoodsBO<GoodsSpecification, GoodsProduct, GoodsAttribute> goodsBO);

    /**
     * 根据商品信息从数据库中删除该商品
     * @param goods 从前端获取的商品信息
     */
    void deleteGoods(Goods goods);

    /**
     * 获取当前商品的详情信息
     * @param id 商品的id
     * @return goods(商品信息)，categoryIds（类别编号），attributes（商品属性），specifications（规格信息），products（产品信息）
     */
    GoodsDetailVO<GoodsAttribute, GoodsSpecification, GoodsProduct> queryGoodsDetail(Integer id);

    /**
     * 为上架页面提供品牌信息
     * @return categoryList（商品类别信息），brandList(品牌商信息)
     */
    GoodsCatAndBrandVO<GoodsCategoryVO, GoodsBrandVO> queryGoodsCatAndBrand();

    /**
     * 微信小程序首页显示的商品数量
     * @return total
     */
    Integer countGoods();

    WxGoodsCategoryVo queryCategory(Integer id);

    //url为wx/goods/category
    WxGoodsCategoryVo WxGoodsCategory(String id);

    GoodsDetailVo queryGoodsDetails(Integer id);

    GoodsRelatedVo queryRelatedGoods(Integer id);

    WxGoodsListVo queryGoodsListSelective(GoodsListBo goodsListBo);

}
